package ferp.core.tutorial.beginner;

import ferp.core.card.Card;
import ferp.core.game.Bid;
import ferp.core.tutorial.Scenario;

/**
 * User: igorgok
 * Date: 06/05/2015 11:02
 */
public class Misere extends Scenario
{
  public static class Lesson1 extends Misere
  {
    public Lesson1()
    {
      super(new Resource("Мизер", "Misere"));

      deal(0, 386728705, -1605195756, 1218466858, 128, 64);

      bid(0, 0, Bid.misere(), Note.top(new Resource("Правый игрок пасует по той же причине.<br>" +
                                                    "У вас идеальные карты для объявления мизера:<br>" +
                                                    "1. Во всех мастях семёрки.<br>" +
                                                    "2. Независимо от хода оппонентов, у вас всегда есть возможность отдать им взятку, положив карту меньшего достоинства.<br>" +
                                                    "Нажмите кнопку <b>Мизер</b>.",
                                                    "The right player passes for the same reason.<br>" +
                                                    "You have perfect cards for declaring misere:<br>" +
                                                    "1. Each suit you have starts with 7.<br>" +
                                                    "2. Regardless of how opponents move, you can always play the lower card giving the trick away.<br>" +
                                                    "Tap the <b>Misere</b> button.")));

      bid(0, 1, Bid.pass(), Note.center(new Resource("Игрок слева в этом розыгрыше является <b>первой рукой</b> {first_hand_left}. Он начинает <b>торг</b>.",
                                                     "Player on the left is a <b>first hand</b> {first_hand_left} in this game. He starts the <b>bidding</b> round.")));

      bid(0, 2, Bid.pass(), Note.center(new Resource("Левый игрок пасует, так как у него на руках слабые карты.",
                                                     "Left player passes, since he has weak cards.")));

      setOver.bidding(new Resource("Торг завершен.<br>" +
                                   "В верхней части стола открылись 2 карты, называемые <b>прикуп</b>. Они добавятся к Вашим 10-ти картам.<br>" +
                                   "Для этого, нажмите на любое место на экране.",
                                   "Bidding is over.<br>" +
                                   "You can see 2 open cards on the top of the screen. They are called <b>talon</b>." +
                                   "These cards are to be added to the ten cards you already have.<br>" +
                                   "To do that tap the screen."));

      drop(128, 64, new Resource("Перед началом розыгрыша, у каждого игрока должно быть по 10 карт. В данный момент у Вас их 12, поэтому вы обязаны снести 2.<br>" +
                                 "Взятые из прикупа К и Т превращают 0h в опасную масть. Поэтому, лучше всего избавиться от них и, таким образом, отдать все взятки оппонентам.<br>" +
                                 "Нажмите на отмеченые 2 карты, затем на кнопку <b>Снос</b>",
                                 "Before the game starts each player should have 10 cards in hand. At the moment you have 12, therefore you must discard 2.<br>" +
                                 "Talon cards K and A make 0h a dangerous suit. Therefore, it is wise to get rid of these leaving all the trick to the opponents.<br>" +
                                 "Tap the 2 marked cards, then the <b>Drop</b> button."));

      contract(0, 0, Bid.misere(), Note.top(new Resource("Начните розыгрыш мизера, нажав на кнопку <b>Играть</b>.",
                                                         "Start misere game by pressing the <b>Play</b> button.")));

      trick(0, -1069120507, new Resource("У Вас гарантированный мизер, т.е. все взятки заберут оппоненты, так как у Вас младшие карты во всех мастях.<br>" +
                                         "Просто ходите обозначенными картами...",
                                         "You have a guaranteed misere here, meaning that opponents are going to win all the tricks as you have the lowest cards in all suits.<br>" +
                                         "Just play the marked cards..."),
                            new Resource("По правилам оппоненты обязаны открыть свои карты, а также записать Ваши 12 карт до сноса. Они не знают какие именно 2 карты Вы снесли.<br>" +
                                         "Ходы в розыгрыше мизера производятся по правилам игры без козыря.",
                                         "According to the game rules opponents must reveal their cards and write down all the cards you had before the drop. Opponents do not know which 2 cards out of 12 you actually dropped.<br>" +
                                         "In misere game cards are played according to the trumpless game rules."),
                            null);

      trick(1, -1068988669);
      trick(2, -1068855284);
      trick(3, -1064432819);
      trick(4, -1063841194);
      trick(5, -1063972520);
      trick(6, -1068199143, new Resource("У Вас нет 0d - можно играть любой картой. Например h7.", "You have no cards in 0d, thus any card can be played. E.g. h7."), null, null);
      trick(7, -1067737591);
      trick(8, -1063517603);
      trick(9, -1063648945, new Resource("Вы успешно сыграли мизер, не взяв ни одной взятки.", "You have successfully played misere without taking tricks."));

      scoring(new Resource("При успешно сыгранном мизере, объявившему игроку добавляется <b>10</b> очков в <b>пулю</b>.",
                           "Successfully played misere awards the declarer with <b>10</b> points in the <b>pool</b>."));
    }
  }

  public static class Lesson2 extends Misere
  {
    public Lesson2()
    {
      super(new Resource("Оппонент играет мизер", "Opponent plays misere"));

      deal(2, 1724000384, 420283139, -2144299940, 16384, 32);

      bid(0, 0, Bid.play(Card.Suit.SPADES, 6), Note.top(new Resource("Вы начинаете торг, так как в этой раздаче Вы - <b>первая рука</b> {first_hand_right}.<br>" +
                                                                     "С такой картой, как у Вас - можно пробовать играть. Нажмите кнопку с заявкой 6s.",
                                                                     "You start the bidding as in this game you are the <b>first hand</b> {first_hand_right}.<br>" +
                                                                     "Your cards look good for playing minimal contract. Tap the marked button to bid 6s.")));

      bid(0, 1, Bid.misere(), null);

      bid(0, 2, Bid.pass(), Note.center(new Resource("Левый игрок объявил <b>мизер</b>. По правилам, минимальная заявка становится 9s.",
                                                     "The left player declared <b>misere</b>. According to the game rules the minimum bid is now 9s.")));
      bid(1, 0, Bid.pass(), Note.top(new Resource("Правый игрок <b>пасует</b>. Ваши карты не позволяют играть <b>девятерную</b>. Нажмите кнопку <b>Пас</b>.",
                                                  "The right player <b>passes</b>. Your cards would not allow playing the <b>game of 9</b>. Tap the <b>Pass</b> button.")));

      setOver.bidding(new Resource("Торг завершен. Левый игрок заберёт <b>прикуп</b>, открывшийся в верхней части экрана.",
                                   "The bidding is over. The left player is going to take the <b>talon</b> cards, shown on the top of the screen."));

      drop(16384, 32, new Resource("Над картами <b>играющего</b> (объявившего мизер игрока) появился список его карт <b>до</b> сноса. Этот список будет корректироваться по мере продвижения розыгрыша.<br>" +
                                   "Ваша с правым игроком задача, играя открытыми картами каждый за себя, отдать играющему хотя бы одну взятку.",
                                   "There is a card list above the left player's cards. It shows declarer's cards <b>before</b> the drop. This list is going to be updated during the game play.<br>" +
                                   "Yours and the right player's goal is to make the declarer take at least one trick, while playing with your cards open."));

      trick(0, -1073265272, new Resource("Скорее всего, играющий снёс dК и hД, так как есть большой шанс получить взятки в этих мастях.<br>" +
                                         "Однако остаётся проблема в 0s, где 10 может сыграть забирая Ваши 8 или 9. Для этого правый игрок должен избавиться от sТ.<br>" +
                                         "Ход sК подходит для этой цели.",
                                         "It is likely that the declarer discarded dK and hQ as there is a great chance of taking tricks in these suits.<br>" +
                                         "However there is still a problem in 0s where 10 can play taking your 8 or 9. For this to happen you must eliminate the right player's sA.<br>" +
                                         "Playing sK does just that."),
                            null,
                            new Resource("Левый игрок положил sВ, что отобразилось в списке его карт.<br>" +
                                         "Правый игрок положит sТ и заберет взятку.",
                                         "The left player played sJ, which was reflected in the list of his cards.<br>" +
                                         "The right player is going to play sA and to take the trick."));

      trick(1, -1063971246, new Resource("Забирайте взятку dД.",
                                         "Play dQ, taking the trick."),
                            null,
                            new Resource("Правый игрок должен передать следующий ход Вам, чтобы Вы смогли пойти 0s.",
                                          "You should start the next round to be able to play 0s."));

      trick(2, -1073593202, new Resource("Ваш ход. Кладите s8.",
                                         "It's your turn. Play s8."),
                            new Resource("Играющему стоит перехватить инициативу и забрать эту взятку s10. В этом случае он гарантировано не возьмёт больше взяток.",
                                         "The declarer must take this trick with s10. Once he does it, he is guaranteed not to take anymore tricks in this game."),
                            new Resource("У правого игрока отсутствуют 0s. По правилам он может положить любую карту.",
                                         "The right player is missing 0s. Thus he can play any card."));

      trick(3, -1069481075, new Resource("В этом раунде и далее кладите отмеченые карты.",
                                         "In this round and in the following ones play the marked cards."),
                            null,
                            new Resource("Играющий выбрал ход s7, отдавая эту и все последующие взятки оппонентам.",
                                         "The declarer decided to play s7, giving this and rest of the tricks away."));

      trick(4, -1071621473);
      trick(5, -1072410216);
      trick(6, -1064106420);
      trick(7, -1063579559);
      trick(8, -1063514293);
      trick(9, -1063450039, new Resource("Играющий не смог успешно сыграть мизер, взяв 1 взятку.",
                                         "The left player has failed to play misere by taking 1 trick."));

      scoring(new Resource("За каждую взятку, взятую играющим, в качестве штрафа ему записывается <b>10</b> очков в <b>гору</b>.",
                           "Each trick taken by declarer gets him a penalty of <b>10</b> points written in his <b>mountain</b>."));
    }
  }

  protected Misere(Resource title)
  {
    super(title);

    introduction.add(new Resource("Задача объявившего <b>мизер</b> - сыграть его, не взяв <b>ни одной</b> взятки. Задача оппонентов - помешать этому.",
                                  "A player who declared <b>misere</b> should take <b>no tricks</b>. His opponents' goal is to prevent this from happening by playing together against him."));
    introduction.add(new Resource("<b>Ходы</b> в розыгрыше производятся по правилам розыгрыша контракта без козыря.",
                                  "<b>Moves</b> in trick taking game is performed by the rules of playing contract with no trump."));
    introduction.add(new Resource("При успешно сыграном мизере, игравшему его игроку начисляется бонус, записываемый в <b>пулю</b>. В противном случае, за каждую взятку ему будет записан штраф в <b>гору</b>.",
                                  "Successful misere game awards declarer with a bonus added to his <b>pool</b> area. Otherwise, each trick taken gives him a penalty score added to the <b>mountain</b> (penalty area)."));
    introduction.add(new Resource("Подробнее о системе подсчета очков смотрите в конце розыгрыша, нажав кнопку <b>Подсчёт</b> в окошке пули.",
                                  "Tapping the <b>Scoring</b> button at the end of the game will provide you with more details on the scoring system."));
  }
}
